package reflect;

import java.io.File;
import java.lang.reflect.Method;

/**
 * 调用与当前类Test3所在同一个包中哪些类中名字含有s的无参方法.
 */
public class Test3 {
    public static void main(String[] args) throws Exception {

        File dir = new File(Test3.class.getResource(".").toURI());//获取目录路径
        String packname = Test3.class.getPackage().getName();//获取包名
        File[] subs = dir.listFiles(f->f.getName().endsWith(".class"));//获取最后名字为.class的名字存进文件数组中
        for (File sub : subs){//遍历
            String fileName = sub.getName();//获取名字
            String className = fileName.substring(0,fileName.indexOf("."));//截取从下标从0开始到.,获取类名
            Class cls = Class.forName(packname+"."+className);//包名.类名
            Object obj = cls.newInstance();//实例化对象

            Method[] methods = cls.getDeclaredMethods();//将获取到的所有方法放到数组中
            for (Method method : methods){//遍历
                if (method.getParameterCount()==0&&method.getName().contains("s")){//若方法无参并且包含s的方法则进入
                    method.invoke(obj);//该实例化的方法
                }
            }
        }
    }
}
